home *** CD-ROM | disk | FTP | other *** search
- public abstract class MathFP {
- // $FF: renamed from: if int
- private static int field_0 = 24;
- // $FF: renamed from: int int
- private static int field_1 = 8;
- // $FF: renamed from: new long
- private static long field_2 = 16777216L;
- // $FF: renamed from: do long
- private static long field_3 = 16777215L;
- // $FF: renamed from: byte long
- private static long field_4 = 100000000L;
- // $FF: renamed from: try long
- private static long field_5 = 0L;
- // $FF: renamed from: a long
- private static long field_6 = 52707178L;
- // $FF: renamed from: for long[]
- private static long[] field_7;
- // $FF: renamed from: PI long
- public static long field_8;
- // $FF: renamed from: E long
- public static long field_9;
- public static final long MAX_VALUE = Long.MAX_VALUE;
- public static final long MIN_VALUE = -9223372036854775807L;
-
- static {
- field_7 = new long[]{field_2, 45605201L, 123967790L, 336979391L, 916004956L};
- field_8 = field_6;
- field_9 = field_7[1];
- }
-
- public static long abs(long var0) {
- return var0 < 0L ? -var0 : var0;
- }
-
- public static long acos(long var0) {
- return field_8 / 2L - asin(var0);
- }
-
- public static long add(long var0, long var2) {
- return var0 + var2;
- }
-
- public static long asin(long var0) {
- if (abs(var0) > field_2) {
- throw new ArithmeticException("Bad Input");
- } else {
- boolean var2 = var0 < 0L;
- var0 = abs(var0);
- long var3 = mul(mul(mul(mul((long)(145103 >> (int)field_5), var0) - (long)(599880 >> (int)field_5), var0) + (long)(1420468 >> (int)field_5), var0) - (long)(3592413 >> (int)field_5), var0) + (long)(26353447 >> (int)field_5);
- long var5 = field_8 / 2L - mul(sqrt(field_2 - var0), var3);
- return var2 ? -var5 : var5;
- }
- }
-
- public static long atan(long var0) {
- return asin(div(var0, sqrt(field_2 + mul(var0, var0))));
- }
-
- public static long atan2(long var0, long var2) {
- long var4 = 0L;
- if (var2 > 0L) {
- var4 = atan(div(var0, var2));
- } else if (var2 < 0L) {
- var4 = (var2 < 0L ? -field_8 : field_8) - atan(abs(div(var0, var2)));
- } else {
- if (var2 == 0L && var0 == 0L) {
- throw new ArithmeticException("Bad Input");
- }
-
- var4 = (var0 < 0L ? -field_8 : field_8) / 2L;
- }
-
- return var4;
- }
-
- public static long convert(long var0, int var2) {
- long var3 = (long)(var0 < 0L ? -1 : 1);
- if (abs((long)var2) < 25L) {
- if (field_0 < var2) {
- var0 = var0 + var3 * (1L << (var2 - field_0 >> 1)) >> var2 - field_0;
- } else {
- var0 <<= field_0 - var2;
- }
- }
-
- return var0;
- }
-
- public static long cos(long var0) {
- return sin(field_8 / 2L - var0);
- }
-
- public static long cot(long var0) {
- return div(cos(var0), sin(var0));
- }
-
- public static long div(long var0, long var2) {
- boolean var4 = false;
- int var5 = field_0;
- if (var2 == field_2) {
- return var0;
- } else if ((var2 & field_3) == 0L) {
- return var0 / (var2 >> var5);
- } else {
- if (var0 < 0L && var2 > 0L || var0 > 0L && var2 < 0L) {
- var4 = true;
- }
-
- if (var0 < 0L) {
- var0 = -var0;
- }
-
- if (var2 < 0L) {
- var2 = -var2;
- }
-
- while(max(var0, var2) >= 1L << 63 - var5) {
- var0 >>= 1;
- var2 >>= 1;
- --var5;
- }
-
- long var6 = (var0 << var5) / var2 << field_0 - var5;
- return var4 ? -var6 : var6;
- }
- }
-
- public static long exp(long var0) {
- if (var0 == 0L) {
- return field_2;
- } else {
- boolean var2 = var0 < 0L;
- var0 = abs(var0);
- int var3 = (int)(var0 >> field_0);
- long var4 = field_2;
-
- for(int var6 = 0; var6 < var3 / 4; ++var6) {
- var4 = mul(var4, field_7[4] >> (int)field_5);
- }
-
- if (var3 % 4 > 0) {
- var4 = mul(var4, field_7[var3 % 4] >> (int)field_5);
- }
-
- var0 &= field_3;
- if (var0 > 0L) {
- long var7 = field_2;
- long var9 = 0L;
- long var11 = 1L;
-
- for(int var13 = 0; var13 < 16; ++var13) {
- var9 += var7 / var11;
- var7 = mul(var7, var0);
- var11 *= (long)(var13 + 1);
- if (var11 > var7 || var7 <= 0L || var11 <= 0L) {
- break;
- }
- }
-
- var4 = mul(var4, var9);
- }
-
- if (var2) {
- var4 = div(field_2, var4);
- }
-
- return var4;
- }
- }
-
- public static int getPrecision() {
- return field_0;
- }
-
- public static long log(long var0) {
- // $FF: Couldn't be decompiled
- }
-
- public static long max(long var0, long var2) {
- return var0 < var2 ? var2 : var0;
- }
-
- public static long min(long var0, long var2) {
- return var2 < var0 ? var2 : var0;
- }
-
- public static long mul(long var0, long var2) {
- boolean var4 = false;
- int var5 = field_0;
- long var6 = field_3;
- if ((var0 & var6) == 0L) {
- return (var0 >> var5) * var2;
- } else if ((var2 & var6) == 0L) {
- return var0 * (var2 >> var5);
- } else {
- if (var0 < 0L && var2 > 0L || var0 > 0L && var2 < 0L) {
- var4 = true;
- }
-
- if (var0 < 0L) {
- var0 = -var0;
- }
-
- if (var2 < 0L) {
- var2 = -var2;
- }
-
- while(max(var0, var2) >= 1L << 63 - var5) {
- var0 >>= 1;
- var2 >>= 1;
- var6 >>= 1;
- --var5;
- }
-
- long var8 = (var0 >> var5) * (var2 >> var5) << var5;
- long var10 = (var0 & var6) * (var2 & var6) >> var5;
- var10 += (var0 & ~var6) * (var2 & var6) >> var5;
- var8 = var8 + var10 + ((var0 & var6) * (var2 & ~var6) >> var5) << field_0 - var5;
- if (var8 < 0L) {
- throw new ArithmeticException("Overflow");
- } else {
- return var4 ? -var8 : var8;
- }
- }
- }
-
- public static long pow(long var0, long var2) {
- boolean var4 = var2 < 0L;
- long var5 = field_2;
- var2 = abs(var2);
-
- for(int var7 = (int)var2 >> field_0; var7-- > 0; var5 = mul(var5, var0)) {
- }
-
- if (var5 < 0L) {
- throw new ArithmeticException("Overflow");
- } else {
- if (var0 != 0L) {
- var5 = mul(var5, exp(mul(log(var0), var2 & field_3)));
- } else {
- var5 = 0L;
- }
-
- return var4 ? div(field_2, var5) : var5;
- }
- }
-
- public static long round(long var0, int var2) {
- long var3 = 10L;
-
- for(int var5 = 0; var5 < var2; ++var5) {
- var3 *= 10L;
- }
-
- var3 = div(toFP(5L), toFP(var3));
- if (var0 < 0L) {
- var3 = -var3;
- }
-
- return var0 + var3;
- }
-
- public static int setPrecision(int var0) {
- if (var0 <= 24 && var0 >= 0) {
- field_0 = var0;
- field_2 = 1L << var0;
- field_5 = (long)(24 - var0);
- field_1 = 0;
- field_4 = 1L;
- field_3 = field_2 - 1L;
- field_8 = field_6 >> (int)field_5;
- field_9 = field_7[1] >> (int)field_5;
-
- for(long var1 = field_2; var1 != 0L; field_4 *= 10L) {
- var1 /= 10L;
- ++field_1;
- }
-
- return field_1;
- } else {
- return field_1;
- }
- }
-
- public static long sin(long var0) {
- long var2 = mul(var0, div(toFP(180L), field_8));
- var2 %= toFP(360L);
- if (var2 < 0L) {
- var2 += toFP(360L);
- }
-
- long var4 = var2;
- if (var2 >= toFP(90L) && var2 < toFP(270L)) {
- var4 = toFP(180L) - var2;
- } else if (var2 >= toFP(270L) && var2 < toFP(360L)) {
- var4 = -(toFP(360L) - var2);
- }
-
- long var6 = var4 / 90L;
- long var8 = mul(var6, var6);
- long var10 = mul(mul(mul(mul(-73190L >> (int)field_5, var8) + (1333581L >> (int)field_5), var8) - (10836755L >> (int)field_5), var8) + (long)(26353564 >> (int)field_5), var6);
- return var10;
- }
-
- public static long sqrt(long var0) {
- return sqrt(var0, 24);
- }
-
- public static long sqrt(long var0, int var2) {
- if (var0 < 0L) {
- throw new ArithmeticException("Bad Input");
- } else if (var0 == 0L) {
- return 0L;
- } else {
- long var3 = var0 + field_2 >> 1;
-
- for(int var5 = 0; var5 < var2; ++var5) {
- var3 = var3 + div(var0, var3) >> 1;
- }
-
- if (var3 < 0L) {
- throw new ArithmeticException("Overflow");
- } else {
- return var3;
- }
- }
- }
-
- public static long sub(long var0, long var2) {
- return var0 - var2;
- }
-
- public static long tan(long var0) {
- return div(sin(var0), cos(var0));
- }
-
- public static long toFP(long var0) {
- return var0 << field_0;
- }
-
- public static long toFP(String var0) {
- byte var1 = 0;
- if (var0.charAt(0) == '-') {
- var1 = 1;
- }
-
- String var2 = "-1";
- int var3 = var0.indexOf(46);
- if (var3 >= 0) {
- for(var2 = var0.substring(var3 + 1, var0.length()); var2.length() < field_1; var2 = var2 + "0") {
- }
-
- if (var2.length() > field_1) {
- var2 = var2.substring(0, field_1);
- }
- } else {
- var3 = var0.length();
- }
-
- long var4 = 0L;
- if (var1 != var3) {
- var4 = Long.parseLong(var0.substring(var1, var3));
- }
-
- long var6 = Long.parseLong(var2) + 1L;
- long var8 = (var4 << field_0) + (var6 << field_0) / field_4;
- if (var1 == 1) {
- var8 = -var8;
- }
-
- return var8;
- }
-
- public static long toLong(long var0) {
- var0 = round(var0, 0);
- return var0 >> field_0;
- }
-
- public static String toString(long var0) {
- boolean var2 = false;
- if (var0 < 0L) {
- var2 = true;
- var0 = -var0;
- }
-
- long var3 = var0 >> field_0;
- long var5 = field_4 * (var0 & field_3) >> field_0;
-
- String var7;
- for(var7 = Long.toString(var5); var7.length() < field_1; var7 = "0" + var7) {
- }
-
- return (var2 ? "-" : "") + Long.toString(var3) + "." + var7;
- }
-
- public static String toString(long var0, int var2) {
- if (var2 > field_1) {
- var2 = field_1;
- }
-
- String var3 = toString(round(var0, var2));
- return var3.substring(0, var3.length() - field_1 + var2);
- }
- }
-